进程间通信最快速高效的办法是共享内存吗? |
您所在的位置:网站首页 › zeromq js › 进程间通信最快速高效的办法是共享内存吗? |
理论上应该是的,不过,你需要在进程间同步操作上花心思,这与多线程的同步有区别,需要核心对象(互斥器,信号量等)的介入。这些操作可能会影响性能,设计上与数据吞吐量等有关系。 另外,你还要注意,任何标准容器如 vector、string 等都不能直接放入共享内存,因为它们里面的指针指向的是本地地址空间中的位置,对于另一个进程来说都是野指针。所以你可能需要设计一套用于共享内存的容器(关键在于不能使用指针,要使用 offset,并保持紧凑)。boost 的 ipc 可供选择或参考,当然,还有其它一些现成的库。 如果你采用类似远程调用的通讯模型,即调用一个函数发送数据并等待返回结果,你还需要决策是否要支持 callback;也就是进程 A 调用进程 B 的函数 f 时,f 函数又调用进程 A 的 g 函数。这会增加同步机制的复杂程度。 其实,在大多数时候,你都可以选择使用 socket 来做进程间通讯。好处是一旦完成,你的程序不光能进程间通讯,还能跨机器、跨平台通讯。而最棒的一点是,socket 在本机上可以使用 loopback。经过我的测试,在大块数据上,其性能直逼内存拷贝速度的理论上限,这是非常令人振奋的。 MQ 等基于消息的通讯方式也是很好的选择呀,至于性能,只能通过测试用例来得到答案。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |